package com.pktechan.manage.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartFile;

/**
 * @program: cloudfloating
 * @description: FastDfs工具类
 * @author: qx.zhang
 * @create: 2021-03-11 08:47
 **/
@Configuration
public class FastDfsHttpUtil {

    private static Logger logger = LoggerFactory.getLogger(FastDfsHttpUtil.class);

    //文件服务器 上传接口
    public static String fastdfsUploadFile;
    //文件服务器 获取token接口 外网文件请求地址
    public static String fastdfsGetToken;
    //获取文件服务器 文件base64
    public static String fastdfsGetFileBase64;
    //文件服务器 获取token接口 内网文件请求地址
    public static String fastdfsGetIntranetToken;

    @Value("${fastdfs.uploadFile}")
    public void setFastdfsUploadFile(String fastdfsUploadFile) {
        this.fastdfsUploadFile = fastdfsUploadFile;
    }
    @Value("${fastdfs.getToken}")
    public void setFastdfsGetToken(String fastdfsGetToken) {
        this.fastdfsGetToken = fastdfsGetToken;
    }
    @Value("${fastdfs.getFileBase64}")
    public void setFastdfsGetFileBase64(String fastdfsGetFileBase64) {
        this.fastdfsGetFileBase64 = fastdfsGetFileBase64;
    }
    @Value("${fastdfs.getIntranetToken}")
    public void setFastdfsGetIntranetToken(String fastdfsGetIntranetToken) {
        this.fastdfsGetIntranetToken = fastdfsGetIntranetToken;
    }

    /**
     * fastdfs文件上传
     *
     * @param file     请求上传的文件
     * @param fileName 请求上传的文件的名称 需要带文件后缀
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData uploadFile(MultipartFile file, String fileName) throws Exception {
        return HttpIOUtil.postSendFile(fastdfsUploadFile, file, fileName);
    }

    /**
     * fastdfs文件上传
     *
     * @param file 请求上传的文件
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData uploadFile(MultipartFile file) throws Exception {
        return HttpIOUtil.postSendFile(fastdfsUploadFile, file);
    }

    /**
     * fastdfs文件上传
     *
     * @param base64   请求上传的文件 的base64编码
     * @param fileName 请求上传的文件的名称 需要带文件后缀
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData uploadFile(String base64, String fileName) throws Exception {
        return HttpIOUtil.postSendFile(fastdfsUploadFile, base64, fileName);
    }

    /**
     * fastdfs文件上传
     *
     * @param fileByte 请求上传的文件 的二进制
     * @param fileName 请求上传的文件的名称 需要带文件后缀 如： 可爱.png
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData uploadFile(byte[] fileByte, String fileName) throws Exception {
        return HttpIOUtil.postSendFile(fastdfsUploadFile, fileByte, fileName);
    }

    /**
     * fastdfs文件上传
     *
     * @param fileByte 请求上传的文件的Byte[]
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData uploadFile(byte[] fileByte) throws Exception {
        return HttpIOUtil.postSendFile(fastdfsUploadFile, fileByte);
    }

    /**
     * 获取fastdfs文件Base64
     *
     * @param filePath 请求获取的文件路径
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static String getFileBase64(String filePath) throws Exception {
        return HttpIOUtil.getFileBase64(fastdfsGetFileBase64, filePath);
    }

    /**
     * 获取有效期内的 外网 文件访问地址
     *
     * @param filePath 请求获取的文件路径
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static String getFileHttpUrl(String filePath) {
        try {
            return getFileToken(filePath).getHttpUrl();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 获取有效期内的 内网 文件访问地址
     *
     * @param filePath 请求获取的文件路径
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static String getFileIntranetUrl(String filePath) {
        try {
            return getFileIntranetToken(filePath).getHttpUrl();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 获取有效期内的 外网 文件访问地址
     *
     * @param filePath 请求获取的文件路径
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData getFileToken(String filePath) throws Exception {
        return HttpIOUtil.getFileToken(fastdfsGetToken, filePath);
    }

    /**
     * 获取有效期内的 内网 文件访问地址
     *
     * @param filePath 请求获取的文件路径
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static FileResponseData getFileIntranetToken(String filePath) throws Exception {
        return HttpIOUtil.getFileToken(fastdfsGetIntranetToken, filePath);
    }


    /**
     * fastdfs文件上传 直接返回可访问的外网地址
     *
     * @return FileResponseData
     * @throws Exception
     * @Description:
     */
    public static String uploadFileReturnUrl(MultipartFile file) throws Exception {
        FileResponseData fileResponseData = HttpIOUtil.postSendFile(fastdfsUploadFile, file);
        return fileResponseData.getHttpUrl();
    }


    public static void main(String[] args) {
        try {
//            String fileBase64 = getFileBase64("group1/M00/00/00/wKhat15MsAGAfOixAAYfVON1r0s734.jpg");
//            System.out.println("fileBase64" + fileBase64);
//            FileResponseData fileResponseData = getFileToken("group1/M00/00/00/wKhat15MsAGAfOixAAYfVON1r0s734.jpg");
//            System.out.println(fileResponseData);
            String fileHttpUrl = getFileHttpUrl("group1/M00/00/01/wKhat15Un32AD8a5AAYfVON1r0s001.jpg");
            System.out.println(fileHttpUrl);
            String fileIntranetHttpUrl = getFileIntranetUrl("group1/M00/00/01/wKhat15Un32AD8a5AAYfVON1r0s001.jpg");
            System.out.println(fileIntranetHttpUrl);

            String fileBase64 = getFileBase64("group1/M00/00/00/wKiMyF5Mx0WARv2QAAS7WWeAD3Y212.png");
            System.out.println(fileBase64);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
